package com.example.rpc_core.register;

import com.example.rpc_core.cache.RegisterServiceCache;
import com.example.rpc_core.config.RegistryConfig;
import com.example.rpc_core.model.ServiceInfo;

import java.util.List;
import java.util.concurrent.ExecutionException;

public interface Register {
    /**
     * 初始化
     * @param registryConfig
     */
    void init(RegistryConfig registryConfig);

    /**
     * 服务注册
     * @param serviceInfo
     */
    void register(ServiceInfo serviceInfo) throws ExecutionException, InterruptedException;

    /**
     *  服务注销
     * @param serviceInfo
     */
    void unRegister(ServiceInfo serviceInfo);

    /**
     * 服务发现
     * @param serviceKey
     * @return
     */
    List<ServiceInfo> serviceDiscovery(String serviceKey);

    /**
     * 服务销毁
     */
    void destroy();

    /**
     *心跳检测
     */
    void heartbeat();
    /**
     * 监听（消费端）
     */
    void watch(String serviceKey);

}
